package com.sodimac.v2s.commands
{
	import com.adobe.cairngorm.commands.ICommand;
	import com.adobe.cairngorm.control.CairngormEvent;
	import com.sodimac.util.alerts.alert;
	import com.sodimac.util.commons.UtilString;
	import com.sodimac.util.commons.UtilXml;
	import com.sodimac.v2s.business.SfpcDelegate;
	import com.sodimac.v2s.events.cargarInfoSfpcEvent;
	import com.sodimac.v2s.model.ComprasModelLocator;
	import com.sodimac.v2s.vo.InfoSfpVO;
	import com.sodimac.v2s.vo.SfpcProdPaisVO;
	
	import mx.collections.ArrayCollection;
	import mx.controls.DateField;
	import mx.rpc.IResponder;
	
	public class obtenerInfoSfpcCommand implements ICommand, IResponder
	{
		private var modelo:ComprasModelLocator = ComprasModelLocator.getInstance();
		private var strMetodo:String ="";
		
		public function execute(event:CairngormEvent):void
		{
			var delegate:SfpcDelegate = new SfpcDelegate(this);
			var sfpcEvt:cargarInfoSfpcEvent = cargarInfoSfpcEvent(event);
			
			strMetodo = sfpcEvt.metodo;
			
			if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorp"))
			{
				delegate.ConsultaPedidoCorp(modelo.cabecera,sfpcEvt.idPedidoCorp);
			} 
			else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoHom"))
			{
				delegate.ConsultaPedidoCorpProductoHom(modelo.cabecera, sfpcEvt.idEmpresa, sfpcEvt.idPedidoCorp);
			}
			else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoNac"))
			{
				delegate.ConsultaPedidoCorpProductoNac(modelo.cabecera, sfpcEvt.idEmpresa, sfpcEvt.idPedidoCorp);
			}

			

		}
		
        public function result(obj: Object): void
        {            
			var xml:XML = new XML(obj.result);
			var xmlList:XMLList;
			xml = UtilXml.removeNamespacesFromXML(xml);
			xmlList = xml.children();
			
			var result:Number = Number(xmlList.cabecera.@id);
			var glosa:String =  xmlList.cabecera.@glosa;
			trace("WS SolicitudFPConjunta["+strMetodo+"] response id=" +result);
	//		trace("XML " +  xmlList.toXMLString());
			
	  	      switch (result){
	  	      case 0:   //Ok
	  	      			var xmlInfo:XMLList; 
	  	      			
						if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorp"))
						{
							xmlInfo = xmlList.payload.infoSfpc;
							procesaEncabezadoSFPC(xmlInfo);
						} 
						else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoHom"))
						{
							xmlInfo = xmlList.payload.productos;
							procesaProductosHomSFPC(xmlInfo);
						}	  	      			
						else if (UtilString.equalsIgnoreCase(strMetodo, "consultaPedidoCorpProductoNac"))
						{
							xmlInfo = xmlList.payload.productos;
							if (glosa.indexOf("sin productos") >0)
							{
								modelo.existePedido = "1";
								alert.error("Pedido se encuentra sin productos o en espera de confirmación.");
							}
							procesaProductosNacSFPC(xmlInfo);	
							
						}		  	      			
	  	      			break;
	  	      			
	  	      case 1:   //Error
	  	      			alert.error("Ha ocurrido un error:\n\n"+  glosa);
	  	      			break;
	  	      			
	  	      default:  //reintentar
	  	      	  	     alert.info("Problemas con respuesta del servicio, " + 
									"favor reintente mas tarde.\n\n"+ glosa);
	  	      			break;                  	      						
	  	      }


        }
                
        public function fault(obj: Object): void
        {
        	alert.error("Ha Ocurrido un Error al consultar Productos.");
        }
        
        
     
		private function procesaProductosHomSFPC(productos:XMLList):void 
		{
//			trace(" ------- obtenerInfoSpfcCommand.procesaProductosHomSFPC ----------- ");
//			trace(productos);
//			trace(" ------------------- ");
			
			var prodCorpArr:ArrayCollection = new ArrayCollection();
			var paisesArr:Array = new Array();
			var i:int= 0;
			var sumaPaises:Number = 0;
			
			//llamada a evento nac
			var prodNacEvent:cargarInfoSfpcEvent = new cargarInfoSfpcEvent();
			prodNacEvent.metodo = "consultaPedidoCorpProductoNac";
			prodNacEvent.idEmpresa = modelo.cabecera.localizacion.empresa;
			prodNacEvent.idPedidoCorp = modelo.sesion.pedidoCorpId;
			prodNacEvent.dispatch();
						
			
			for each(var producto:XML in productos.producto)			
			{
                 sumaPaises = 0;
                 var tmpProd: Object = new Object();
 				 tmpProd.vin = String(producto.vin);
 				 tmpProd.vc_vin = String(producto.vc_vin);
                 tmpProd.ean = String(producto.ean);
                 tmpProd.description = String(producto.description);
                 tmpProd.unit_price = Number(producto.unitPrice);
                 tmpProd.unit_kgs = Number(producto.unitKgs);
                 tmpProd.unit_cbm = Number(producto.unitCbm);
                 tmpProd.sub_quantity = Number(producto.subQuantity);
                 tmpProd.sub_quantity_original = tmpProd.sub_quantity;   //clone for diff
                 tmpProd.sub_total = Number(tmpProd.unit_price * tmpProd.sub_quantity);// Number(producto.subTotal);
                 tmpProd.moneda = String(producto.moneda);
                 tmpProd.moq = Number(producto.moq);
                 
				for each(var pais:XML in producto.infoProductosPais.productoPais)			
				{
					var idPais:String = UtilString.toLowerCase(pais.@id)+ "_";
   					tmpProd[idPais + "sku"] = String(pais.sku);						
					tmpProd[idPais + "tipology"] = Number(pais.tipology);
					tmpProd[idPais + "tolerancia"] = Number(pais.tolerancia);
					tmpProd[idPais + "description"] = String(pais.paisDescr);
					tmpProd[idPais + "quantity"] = Number(pais.paisQuantity);
					tmpProd[idPais + "case_pack"] = Number(pais.casePack);
					tmpProd[idPais + "sub_price"] = Number(pais.paisQuantity * tmpProd.unit_price);
					tmpProd[idPais + "sub_kgs"]   = Number(pais.paisQuantity * tmpProd.unit_kgs);
					tmpProd[idPais + "sub_cbm"]   = Number(pais.paisQuantity * tmpProd.unit_cbm);
					var tol:Number = pais.tolerancia;
					var cantidad:Number = pais.paisQuantity;
					if ( (!isNaN(tol)) && (Number(tol)>0))
					{
						tmpProd[idPais + "max_tolerancia"] =  cantidad + Math.round( (cantidad*tol)/100); 
					}
					else
					{
						tmpProd[idPais + "max_tolerancia"] = cantidad;
					}					
					
					
					//set country array  
					if (paisesArr.indexOf(String(pais.@id)) < 0)
					{
						paisesArr.push(String(pais.@id));
					}
					
					//suma catidad pais
					sumaPaises +=  Number(pais.paisQuantity);
				}
				
				//Modificado por RGA 2010-01-28 (corrige suma de tmpProd.sub_quantity)
				tmpProd.sub_quantity = sumaPaises;
                tmpProd.sub_quantity_original = sumaPaises;   //clone for diff				
				//fin modificación
				                  
				 prodCorpArr.addItem(tmpProd);
				 i++;                          
            }
            modelo.paisesData = paisesArr;
            modelo.prodConjHomData = prodCorpArr;
            trace('--> procesa ProductosHomSFPC con datos');
		}	        
        
        
		private function procesaProductosNacSFPC(productos:XMLList):void 
		{
//			trace(" ------- obtenerInfoSpfcCommand.procesaProductosNacSFPC ----------- ");
//			trace(productos);
//			trace(" ------------------- ");
			var prodNacArr:ArrayCollection = new ArrayCollection();
			var paisesArr:Array = new Array();
			var i:int= 0;
			
			for each(var prodPais:XML in productos.productoPais)			
			{
                
                var prodPaisArr:ArrayCollection = new ArrayCollection();
                var idPais:String = prodPais.@id;

				for each(var producto:XML in prodPais.producto)			
				{
                	var tmpProd:SfpcProdPaisVO = new SfpcProdPaisVO();
   					tmpProd.sku = producto.sku;						
					tmpProd.tipology = producto.tipology;
					tmpProd.paisDescr = producto.paisDescr;
					tmpProd.paisQuantity = producto.paisQuantity;
					tmpProd.paisQuantityOriginal = tmpProd.paisQuantity;  //clone for diff
					tmpProd.casePack = producto.casePack;
					tmpProd.moneda = producto.codiMone;
					tmpProd.unitPrice = producto.unitPrice;
					tmpProd.unitKgs   = producto.unitKgs;
					tmpProd.unitCbm   = producto.unitCbm;					
					tmpProd.tolerancia = producto.tolerancia;
					tmpProd.subPrice  = Number(tmpProd.paisQuantity * tmpProd.unitPrice);
					tmpProd.subKgs    = Number(tmpProd.paisQuantity * tmpProd.unitKgs);
					tmpProd.subCbm    = Number(tmpProd.paisQuantity * tmpProd.unitCbm);
					
					prodPaisArr.addItem(tmpProd);
				}                  

				if (prodPaisArr.length > 0)
				{
					prodNacArr.addItem(prodPaisArr);
					//set country array  
					if (paisesArr.indexOf(idPais) < 0)
					{
						paisesArr.push(idPais);
					} 						
				}
			 	i++;                          
            }
            modelo.paisesNacData = paisesArr;
            modelo.prodConjNacData = prodNacArr;
            trace('--> ProductosNacSFPC con datos');
		}        
        
		private function procesaEncabezadoSFPC(sfpList:XMLList):void 
		{
 			var imXml:XML = new XML(modelo.sesion.intMerchant);
 			var fecha:Date = new Date();     //get GMT

			for each(var data:XML in sfpList)			
			{
	            var tmpSfp:InfoSfpVO = new InfoSfpVO();
	            var strFecha:String ="";
	            
				 tmpSfp.numeroSFP = data.sfpc;
				 strFecha = String(data.fecha).substr(0,10);
	             fecha = DateField.stringToDate(strFecha, "YYYY-MM-DD");
	             tmpSfp.fecha = fecha;
	             tmpSfp.fecha_formato = DateField.dateToString(fecha, 'DD-MM-YYYY');  //para pantalla
	             tmpSfp.estado =  UtilString.isBlank(data.estado)? "RECEPCIONADO": data.estado; 
	             tmpSfp.numeroOC = "";
				 tmpSfp.version = UtilString.isBlank(data.version)? "1.0": data.version;
				 tmpSfp.merchantId = data.idIntMerchant;
				 tmpSfp.merchantNombre = imXml.row.(@id==String(tmpSfp.merchantId)).@apellidoNombre;
				 tmpSfp.proveedorId = data.idProvCorp;
				 tmpSfp.proveedorNombre = data.proveedor;
				 tmpSfp.empresaId = "";
	
				 modelo.sfpcData = tmpSfp;
			}
			trace('--> sfpcData con datos');
			
					
		}        
        					
	}
}